package com.hbnu.controller;
import com.hbnu.pojo.Door;
import com.hbnu.pojo.Order;
import com.hbnu.service.DoorService;
import com.hbnu.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

@Controller
public class OrderController {
    @Autowired
    private OrderService orderService;
    @Autowired
    private DoorService doorService;


    // 1.查询所有订单信息
    @RequestMapping("/orderList")
    public String orderList(Model model) {
        // 1.调用OrderService层的findAll方法查询所有订单
        List<Order> orderList = orderService.findAll();
        // 2.将所有订单的list集合存入Model中(存入request域中)
        model.addAttribute("orderList", orderList);
        // 3.查询所有门店
        List<Door> doorlist = doorService.findAll();
        // 4.将所有订单的list集合存入Model中(存入request域中)
        model.addAttribute("doorList", doorlist);
        // 5.转向订单列表页面
        return "order_list";
    }

    // 2.1.添加订单信息 -- 查询所有门店并跳转到添加订单页面
    @RequestMapping("/findAllDoorToOrderAdd")
    public String toDoorAdd(Model model) {
        // 1.调用doorService的findAll方法, 查询所有门店信息
        List<Door> doorList = doorService.findAll();
        // 2.将所有门店List存入model中
        model.addAttribute("doorList", doorList);
        return "order_add";
    }

    // 自定义接受收日期格式的数据
    @InitBinder
    public void initBinder(WebDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
    }

     // 2.添加订单信息
     @RequestMapping("/orderAdd")
     public String orderAdd(Order order) {
         Date time = new Date(System.currentTimeMillis());
         order.setOrderTime(time);
         order.setPayTime(time);
         // 1.调用service层的addOrder方法，新增订单信息
         orderService.addOrder(order);
         // 2.重定向到订单列表页面, 显示所有订单信息
         return "redirect:/orderList";
     }

     //3.根据id删除订单信息
     @RequestMapping("/orderDelete")
     public String orderDelete(Integer id) {
         // 1.调用service层的deleteById方法，删除指定id的订单信息
         orderService.deleteById(id);
         // 2.重定向到订单列表页面, 显示所有订单信息
         return "redirect:/orderList";
     }

     // 4.根据id查询订单信息
     @RequestMapping("/orderInfo")
     public String orderInfo(Integer id, Model model) {
         // 1.调用doorService的findAll方法, 查询所有门店信息
         List<Door> doorList = doorService.findAll();
         // 2.将所有门店List存入model中
         model.addAttribute("doorList", doorList);
         // 3.调用service层的findyId方法，根据id查询订单信息
         Order order = orderService.findById(id);
         //4.将订单信息保存到Model中
         model.addAttribute("order", order);
         //5.将订单信息带到order_update.jsp进行回显
         return "order_update";
     }

     // 5.根据id更新订单信息
     @RequestMapping("/orderUpdate")
     public String orderUpdate(Order order) {
         // 1.调用service层的updateById方法，根据id更新订单信息
         orderService.updateById(order);
         // 2.重定向到订单列表页面, 显示所有订单信息
         return "redirect:/orderList";
     }
}
